#include "app_common.h"
#include <sys/time.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

/**
 * @brief 获取当前毫秒时间戳
 */
long app_common_get_cur_ts()
{    struct timeval tv;
     gettimeofday(&tv, NULL);
     return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}


/**
 * @brief 把字节数组转换为16进制字符串
 */
char *app_common_bytes_to_hexstr(  char *bytes_data, int data_len)
{
    char  *hexstr = (char *)malloc(data_len * 2 + 1);    
    for (size_t i = 0; i < data_len; i++)
    {
        sprintf(hexstr + i * 2, "%02x", bytes_data[i]); //每个字节转成两个16进制字符串
    }
    hexstr[data_len * 2] = '\0';  //补结束符号

    return hexstr;
}


/**
 * @brief 把16进制字符串转换为字节数组
 * @param hexstr 16进制字符串
 * @param bytes_buff 字节数组q容器
 * @param buff_len 容器长度
 * @return 转换后的字节数组长度
 */
int app_common_hexstr_to_bytes(char *hexstr, char *bytes_buff , int buff_len)
{
    for (size_t i = 0; i < strlen(hexstr); i+=2)
    {
         sscanf(hexstr + i, "%2hhx", bytes_buff+i/2);    
    }
    return strlen(hexstr) / 2;
    
}


/**
 * @brief 把字节数组打印为16进制值
 */
void app_common_bytes_print(char *bytes, int len)
{
    for (size_t i = 0; i < len; i++)
    {
        printf("%02x ", bytes[i]);
    }
    printf("\n");

}